var name = 'Tom';
(function () {
    if (typeof name == 'undefined') {
        var name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})();

// 1、函数内部的var name声明遮蔽了全局的name变量
// 2、在if条件语句中的name会被提升至函数的顶层作用域，name=undefined，再在if语句当中赋值name=jack